import pygame, os, random, sys
from pygame.locals import *
from imagens import *
from jogador import Jogador
from limites import Limites
from pygame.mixer import Sound

#---------------------------------------------------------------------------------------------------------------------------#

class Jogo:
     
     def __init__ (self):
          self._jogador = Jogador ()
          self._imagens = Imagens ()
          self._carro = self._imagens.get_Carro ()
          self._pista = self._imagens.get_Pista ()
          self._tela = pygame.display.set_mode((920, 500), FULLSCREEN)
          pygame.init ()

     def escolher_Carro(self):
          pygame.mixer.music.load ('..' + os.sep + 'musicas' + os.sep + 'snowpatrol_takeback.mp3')
          pygame.mixer.music.play (-1)
          pygame.mixer.music.set_volume(1.0)
          while True:
               for event in pygame.event.get():
                    if (event.type == KEYDOWN and event.key == K_ESCAPE):
                         pygame.quit ()
                         exit ()
                    elif event.type == MOUSEBUTTONDOWN and pygame.mouse.get_pressed () [0]:
                         posicao = pygame.mouse.get_pos ()
                         if int (posicao [1]) >= 250 and int (posicao [1])<= 410:
                              if int (posicao [0]) >= 160 and int (posicao [0]) <= 243:
                                   self._imagens.set_Carro ("carro_branco.png")
                                   self._carro = self._imagens.get_Carro ()
                                   pygame.mixer.music.stop ()
                                   self.Jogar ()
                              elif int (posicao [0]) >= 250 and int (posicao [0]) <= 333:
                                   self._imagens.set_Carro ("carro_azul.png")
                                   self._carro = self._imagens.get_Carro ()
                                   pygame.mixer.music.stop ()
                                   self.Jogar ()
                              elif int (posicao [0]) >= 340 and int (posicao [0]) <= 423:
                                   self._imagens.set_Carro ("carro_vermelho.png")
                                   self._carro = self._imagens.get_Carro ()
                                   pygame.mixer.music.stop ()
                                   self.Jogar ()
                              elif int (posicao [0]) >= 430 and int (posicao [0]) <= 513:
                                   self._imagens.set_Carro ("carro_verde.png")
                                   self._carro = self._imagens.get_Carro ()
                                   pygame.mixer.music.stop ()
                                   self.Jogar ()
                              elif int (posicao[0]) >= 520 and int (posicao[0]) <= 603:
                                   self._imagens.set_Carro ("carro_amarelo.png")
                                   self._carro = self._imagens.get_Carro ()
                                   pygame.mixer.music.stop ()
                                   self.Jogar ()
                              elif int (posicao[0]) >= 610 and int (posicao[0]) <= 793:
                                   self._imagens.set_Carro ("carro_rosa.png")
                                   self._carro = self._imagens.get_Carro ()
                                   pygame.mixer.music.stop ()
                                   self.Jogar ()

               self.tela_Selecionar_Carro ()

               pygame.display.update()

     def tela_Selecionar_Carro (self):
               self._tela.fill ((0,0,0))
               self._tela.blit (pygame.image.load ('..' + os.sep + 'imagens' + os.sep + "carro_branco.png"), (160,250))
               self._tela.blit (pygame.image.load ('..' + os.sep + "imagens" + os.sep + "carro_azul.png"), (250,250))
               self._tela.blit (pygame.image.load ('..' + os.sep + "imagens" + os.sep + "carro_vermelho.png"), (340,250))
               self._tela.blit (pygame.image.load ('..' + os.sep + "imagens" + os.sep + "carro_verde.png"), (430,250))
               self._tela.blit (pygame.image.load ('..' + os.sep + "imagens" + os.sep + "carro_amarelo.png"), (520,250))
               self._tela.blit (pygame.image.load ('..' + os.sep + "imagens" + os.sep + "carro_rosa.png"), (610,250))
               self._tela.blit (pygame.font.SysFont ("comic sans ms", 90).render ("RACE CAR", True, (255,255,255)), (200,0))
               self._tela.blit (pygame.font.SysFont ("comic sans ms", 90).render ("Selecione seu carro: ", True, (255,255,255)), (20,100))
     
     def mostrar_Pista (self):
          return self._tela.blit (self._pista, (self._imagens.get_Posicao_Pista ().x, self._imagens.get_Posicao_Pista ().y))

     def mostrar_Carro (self):
          return self._tela.blit (self._carro, (self._imagens.get_Posicao_Carro ().x, self._imagens.get_Posicao_Carro ().y))

     def Jogar (self):
          self.mostrar_Pista ()                                   
          self.mostrar_Carro ()
          pygame.display.flip ()
          pygame.mixer.music.load ('..' + os.sep + 'musicas' + os.sep + 'muse_supermassiveblackhole.mp3')
          pygame.mixer.music.play (-1)
          pygame.mixer.music.set_volume(1.0)
          
          while True:
               for event in pygame.event.get():
                    if (event.type == KEYDOWN and event.key == K_ESCAPE):
                        pygame.quit ()
                        exit ()
                        break

               tecla = pygame.key.get_pressed()

               if tecla [K_LEFT] and (self._imagens.get_Posicao_Carro ().x >= Limites ().lim_esquerda):
                    self._imagens.Esquerda ()

               elif tecla [K_RIGHT] and (self._imagens.get_Posicao_Carro ().x < Limites ().lim_direita):
                    self._imagens.Direita ()

               elif tecla [K_UP] and (self._imagens.get_Posicao_Pista ().y <= Limites ().lim_cima):
                    self._imagens.Acelerar ()
                    
               elif tecla [K_DOWN] and (self._imagens.get_Posicao_Pista ().y >= Limites ().lim_baixo):
                    self._imagens.Re ()
                    
               if self._imagens.get_Posicao_Pista ().y == 10:
                    self._imagens.voltar_Posicao_Pista_Inicial ()

               self.mostrar_Pista ()
               self.mostrar_Carro ()
               pygame.display.flip ()


j = Jogo ()
j.escolher_Carro ()
